﻿#ifndef RIBBONTOOLBAR_H
#define RIBBONTOOLBAR_H

#include "ribbontoolbarglobal.h"
#include "itoolbar.h"
#include <QWidget>
#include <QPushButton>
#include <QComboBox>
#include <QTabWidget>
#include <QFontDatabase>
#include <QToolBar>
#include <QColor>
#include <QVector>
#include <QString>
#include <QMenu>
#include <QBoxLayout>
#include <QFileDialog>

// 颜色分组结构体
struct ColorGroup 
{
	QString name; // 分组名称（如"主题颜色"）
	QVector<QColor> colors;
};

class RIBBONTOOLBAR_EXPORT RibbonToolbar : public QWidget, public IToolbar
{
	Q_OBJECT  // 必须保留，支持信号槽
public:
	explicit RibbonToolbar(QWidget* parent = nullptr);

	QWidget* widget() override { return this; }
	void setBoldState(bool bold) override;
	void setItalicState(bool italic) override;
	void setUnderlineState(bool underline) override;
	void setStrikethroughState(bool strikethrough) override;
	void setFontFamily(const QString& family) override;
	void setFontSize(int size) override;
	void setFontColor(const QColor& color) override;
	void setAlignmentState(Qt::Alignment align, bool checked); // 设置按钮选中状态
	void setHighlightColor(const QColor& color);

	// 实现 IToolbar 接口的状态获取方法
	bool boldState() const override;
	bool italicState() const override;
	bool underlineState() const override;
	QString fontFamily() const override;
	int fontSize() const override;
	bool strikethroughState() const override;
	QColor currentFontColor() const override;
	Qt::Alignment currentAlignment() const;
	QColor currentHighlightColor() const { return m_highlightColor; }

signals:  // 新增信号，替代原来的回调
	void boldToggled(bool checked);         // 加粗状态变化
	void italicToggled(bool checked);       // 斜体状态变化
	void underlineToggled(bool checked);    // 下划线状态变化
	void fontFamilySelected(const QString& family);  // 字体选择变化
	void fontSizeSelected(int size);        // 字号选择变化
	void strikethroughToggled(bool checked);  // 新增：删除线状态变化信号
	void fontColorSelected(const QColor& color);
	void alignmentChanged(Qt::Alignment alignment);
	void styleSelected(const QString& styleName);
	void highlightColorSelected(const QColor& color); 
	//插入tab
	void imageInsertRequested(const QString& imagePath);
	void tableInsertRequested(int rows, int columns);
	void shapeSelected(const QString& shapeType); // 新增：形状选择信号

	void undoRequested();  // 撤销信号
	void redoRequested();  // 重做信号
	void saveRequested();
	void newRequested();
	void openRequested();

private slots:
	void onBoldClicked();
	void onItalicClicked();
	void onUnderlineClicked();
	void onStrikethroughClicked();  // 新增：删除线按钮点击处理
	void onFontFamilyChanged(int index);
	void onFontSizeChanged(int index);
	void onFontSizeDecrease();  // 新增：字号减小
	void onFontSizeIncrease();  // 新增：字号增大
	void showColorPanel();
	void onColorSelected(const QColor& color); // 颜色选中处理
	//插入
	void onInsertImageClicked();
	void onInsertTableClicked();


private:
	QTabWidget* m_tabWidget;

	// Home Tab 控件
	QPushButton* m_undoBtn;
	QPushButton* m_redoBtn;
	QPushButton* m_newBtn;
	QPushButton* m_openBtn;
	QPushButton* m_saveBtn;

	QPushButton* m_boldBtn;
	QPushButton* m_italicBtn;
	QPushButton* m_underlineBtn;
	QPushButton* m_strikethroughBtn;  // 新增：删除线按钮
	QComboBox* m_fontCombo;
	QComboBox* m_sizeCombo;
	QPushButton* m_fontIncreaseBtn;  // 字号+1
	QPushButton* m_fontDecreaseBtn;  // 字号-1

	QToolButton* m_fontColorBtn;    // 字体颜色主按钮（显示当前颜色+下拉箭头）
	QMenu* m_colorMenu;             // 颜色选择下拉菜单
	QColor m_currentColor;          // 当前选中的字体颜色（默认黑色）

	QToolButton* m_alignLeftBtn;   // 左对齐
	QToolButton* m_alignCenterBtn; // 居中对齐
	QToolButton* m_alignRightBtn;  // 右对齐
	QToolButton* m_alignJustifyBtn;// 两端对齐
	QToolButton* m_alignDistributedBtn; // 分散对齐按钮

	QToolButton* m_highlightBtn = nullptr;       // 高亮主按钮
	QMenu* m_highlightColorMenu = nullptr;       // 高亮颜色选择菜单
	QColor m_highlightColor = Qt::transparent;   // 当前高亮颜色（透明表示无高亮）
	QAction* m_clearHighlightAction = nullptr;   // 取消高亮动作

	QComboBox* m_styleCombo = nullptr;     // 工具栏上的样式选择下拉框

	// 互斥组（确保只有一个按钮选中）
	QActionGroup* m_alignActionGroup;

	// Insert Tab 控件
	QPushButton* m_insertImageBtn;
	QPushButton* m_insertTableBtn;
	QToolButton* m_shapeBtn; 

	// 存储当前状态
	bool m_bold = false;
	bool m_italic = false;
	bool m_underline = false;
	bool m_strikethrough = false;
	QString m_currentFontFamily = "Arial";
	int m_currentFontSize = 12;
	QList<int> m_standardSizes; // 保存标准字号列表
	void createHomeTab();
	void createInsertTab();
	void createViewTab();
	void initFontLists();
	QToolBar* createToolBar(const QString& title);
	void buildColorMenu();
	void createParagraphButtons(QToolBar* toolBar);
	//QPixmap createColorIcon(const QColor& color, int size = 16);
	QPixmap createUnderlineIcon(const QColor& color, int size = 40);

	void createHighlightControls(QToolBar* toolBar);
	QPixmap createHighlightIcon(const QColor& color, int size = 20);

};

#endif // RIBBONTOOLBAR_H